package Others.DesignPattern.StrategyPattern.Original;

import Others.DesignPattern.StrategyPattern.Original.SimpleFactory.CollectMoney;
import Others.DesignPattern.StrategyPattern.Original.SimpleFactory.CollectMoneyFactory;
import cn.hutool.core.bean.BeanUtil;

import java.util.Scanner;

public class main2 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        //这里就不再使用单价和数量了，应为后续的内容只涉及到对金额的优化
        //而对于前两步的内容无法优化，是固定的，所以这里就直接使用金额了
        System.out.println("请输入您的消费金额：");
        double money = scanner.nextDouble();
        System.out.println("请输入优惠方式：打八折，正常，满300返现100");
        String type = scanner.next();
        CollectMoney collectMoney = CollectMoneyFactory.createCollectMoney(type);
        if (!BeanUtil.isEmpty(collectMoney))
            System.out.println("您优惠后的价格为" + collectMoney.collectMoney(money));
        else System.out.println("您输入的优惠方式有误，按原价处理，消费金额为" + money);

    }
    //先说优势，简单工厂模式的使用，使我们的内容做到了解耦，功能之间不再有深度的耦合
    //即修改某一个功能，不会影响到其他功能--拓展也更为方便
    //但是，如果增加新的内容，仍然避免不了对工厂类的改变，
    //这个模式只是解决对象的创建问题，而且由于工厂本身包括了所有的收费方式，
    //商场是可能经常性地更改打折额度和返利额度，每次维护或扩展收费方式都要改动这个工厂，
    //以致代码需重新编译部署，这真的是很糟糕的处理方式，所以用它不是最好的办法。
    //面对算法的时常变动，应该有更好的办法。
    //于是，我们就不得不继续优化--这就引出了策略模式

}
